
const customForce = {
  init() {

    // 自定义力导向布局类
    class CustomForceLayout {
      getDefaultCfg() {
        return {
          // 默认的布局配置
          nodeSep: 50, // 节点间距
          rankSep: 100, // 层间距
          iterations: 1000, // 迭代次数
          alpha: 0.3, // 初始力强度
          alphaDecay: 0.0228, // 力衰减率
          gravity: 0.1, // 重力
          // 可以添加其他你需要的配置
        };
      }

      // 初始化布局
      init(graph) {
        this.graph = window.graph;
        const nodes = this.graph.getNodes();
        const edges = this.graph.getEdges();

        // 使用 D3.js 创建力导向布局
        this.forceSimulation = d3.forceSimulation(nodes)
          .force('link', d3.forceLink(edges).id(d => d.id).distance(d => this.getDefaultCfg().nodeSep))
          .force('charge', d3.forceManyBody().strength(this.getDefaultCfg().gravity))
          .force('center', d3.forceCenter(this.graph._cfg.canvas._cfg.width / 2, this.graph._cfg.canvas._cfg.height / 2))
          .alpha(this.getDefaultCfg().alpha)
          .alphaDecay(this.getDefaultCfg().alphaDecay)
        // .iterations(this.getDefaultCfg().iterations);
        console.log(nodes, edges)
        // 绑定节点位置更新事件
        nodes.forEach(node => {
          console.log(node, "@@@@")
          node.setModel('x', Math.random() * this.graph._cfg.canvas._cfg.width);
          node.setModel('y', Math.random() * this.graph._cfg.canvas._cfg.height);
          this.forceSimulation.nodes().push(node.getModel());
        });

        // 启动力导向布局
        // this.forceSimulation.on('tick', () => {
        nodes.forEach((node, index) => {
          const model = node.getModel();
          const d3Node = this.forceSimulation.nodes()[index];
          model.x = d3Node.x;
          model.y = d3Node.y;
          node.setPosition(d3Node.x, d3Node.y);
        });
        // });

        // 运行力导向布局
        this.forceSimulation.alphaTarget(0).restart();
      }

      // 执行布局
      execute() {
        // 等待力导向布局完成
        this.forceSimulation.on('end', () => {
          this.emit('layoutend');
        });
      }
    }

    // 注册自定义布局
    G6.Layout.registerLayout('customForce', new CustomForceLayout());
    new CustomForceLayout().init()
  }
}
export default customForce
